#pragma once
#include <cstddef>
#include<string>
#include<regex>
#include<unordered_map>

namespace muduo{
    class HttpRequest{
    public:
        std::string _method;    //请求方法
        std::string _path;      //请求路径
        std::string _version;   //协议版本
        std::string _body;      //请求正文
        std::smatch _matches;   //资源路径的正则提取数据
        std::unordered_map<std::string, std::string> _header;   //请求头
        std::unordered_map<std::string, std::string> _params;   //查询字符串
    public:
        HttpRequest();
        void Reset();               //重设Request内容
        void SetHeader(const std::string& key, const std::string& val);           //插入请求头
        std::string GetHeader(const std::string& key) const;    //获得指定头部字段的值
        bool HasHeader(const std::string& key) const;           //判断是否有指定头部字段的值
        void SetParam(const std::string& key, const std::string& val);            //插入查询字符串
        std::string GetParam(const std::string& key);     //获得查询字符串
        bool HasParam(const std::string& key);            //判断是否有查询字符串

        size_t ContentLength();     //获得正文长度
        bool Close() const;               //判断是否是短链接
    };
}